package com.kqb.sgcommon.satoken;

import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.stp.StpUtil;

/**
 * StpLogic 门面类，管理项目中所有的 StpLogic 账号体系
 *
 * @author 杉果树皮
 */
public class StpKit {

    /**
     * 默认原生会话对象
     */
    public static final StpLogic DEFAULT = StpUtil.stpLogic;

    /**
     * Admin账号体系会话对象
     */
    public static final StpLogic ADMIN = initAdminStpLogic();

    /**
     * User账号体系会话对象
     */
    public static final StpLogic USER = initUserStpLogic();

    // 私有构造防止实例化
    public StpKit() {
    }

    /**
     * 初始化Admin账号体系配置
     */
    private static StpLogic initAdminStpLogic() {
        StpLogic stpLogic = new StpLogic("admin");

        SaTokenConfig config = new SaTokenConfig()
                .setTokenName("sg-admin-token")          // token名称
                .setTimeout(2592000)                 // 30天有效期(秒)
                .setActiveTimeout(-1)                // 不活跃时永不过期
                .setIsConcurrent(false)         // 不允许并发登录
                .setIsShare(true)                    // 允许共享token
                .setIsLog(true)                      // 打印日志
                .setTokenStyle("random-64");         // 64位随机字符串

        stpLogic.setConfig(config);
        return stpLogic;
    }

    /**
     * 初始化User账号体系配置
     */
    private static StpLogic initUserStpLogic() {
        StpLogic stpLogic = new StpLogic("user");

        SaTokenConfig config = new SaTokenConfig()
                .setTokenName("sg-user-token")
                .setTimeout(2592000)                 // 30天有效期
                .setActiveTimeout(7200)              // 2小时不活跃则过期
                .setIsConcurrent(false)              // 不允许并发登录
                .setIsShare(true)                   // 共享token
                .setIsLog(true)                     // 打印日志
                .setTokenStyle("random-64");              // 64位随机字符串

        stpLogic.setConfig(config);
        return stpLogic;
    }


}
